<?php

namespace Reportes\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\VariablesGlobales;
use Reportes\Controller\Service\GenericService;
use Anouar\Fpdf\Fpdf;
use Anouar\Fpdf\FpdfServiceProvider;
use DateTime;
use DateTimeZone;
use Reportes\Model\Dao\InscripcionDAO;
use Componentes\Controller\UtilsArrayController;

class InscripcionService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $inscripcionService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$inscripcionService == null) {
            self::$inscripcionService = new InscripcionService($adapter);
        }
        return self::$inscripcionService;
    }

    public function getInscripcionDao() {
        return InscripcionDAO::getInstance($this->dbAdapter);
    }

    public function getInscripcion($fecha) {
        $fechaNow = new DateTime("now", new DateTimeZone('America/Caracas'));
        $fechaNow = $fechaNow->format('d-m-Y H:i:s');
        $servicioInscripcionDatos = InscripcionDatosService::getInstance($this->dbAdapter);
        $registros = $servicioInscripcionDatos->obtenerArrayInscripcionDatosSegunFecha($fecha);
        $pdf = new FPDF('P', 'mm', 'Letter');
        $pdf->SetMargins(20, 10);
        $pdf->AddPage();
        $pdf->SetFont('Arial', 'B', 10, 'h');
        $this->header($pdf);
        $pdf->SetAutoPageBreak(true, 0.2);
        $ancho1 = 43;
        $alto1 = 6;
        $title = "MONITOREO PARA EL PROCESO DE INSCRIPCION PARA EL DIA: " . $fecha;
        $w = $pdf->GetStringWidth($title) + 6;
        $pdf->SetX((210 - $w) / 2);
        // Colores de los bordes, fondo y texto
        $pdf->SetDrawColor(0, 80, 180);
        $pdf->SetFillColor(205, 232, 255);
        $pdf->SetTextColor(220, 50, 50);
        // Ancho del borde (1 mm)
        $pdf->SetLineWidth(1);
        // Título
        $pdf->Cell($w, 9, $title, 1, 1, 'C', true);
        $pdf->Cell(0, 9, "Fecha de emision: " . $fechaNow, 0, 1, 'C');
        $pdf->SetTextColor(0);
        $pdf->SetLineWidth(0);
        $pdf->Ln(10);
        $pdf->SetFont('Arial', '', 12);
        if (count($registros) > 0) {
            $fechaInicio = $registros[0]['fecha_inicio'];
            $totalBloque = 0;
            $totalInscritosBloque = 0;
            $totalFaltanBloque = 0;
            $totalInscritos = 0;
            $totalFaltan = 0;
            $pdf->Cell($ancho1, $alto1, "", 0, 0, 'C');
            $pdf->Cell($ancho1, $alto1, 'SubTotal', 1, 0, 'C', true);
            $pdf->Cell($ancho1, $alto1, 'Inscritos', 1, 0, 'C', true);
            $pdf->Cell($ancho1, $alto1, 'Faltantes', 1, 1, 'C', true);
            $pdf->Cell($ancho1, $alto1, $fechaInicio, 1, 0, 'L', true);
            for ($i = 0; $i < count($registros); $i++) {
                if ($fechaInicio <> $registros[$i]['fecha_inicio']) {
                    $fechaInicio = $registros[$i]['fecha_inicio'];
                    $pdf->Cell($ancho1, $alto1, $totalBloque, 1, 0, 'C');
                    $pdf->Cell($ancho1, $alto1, $totalInscritosBloque, 1, 0, 'C');
                    $pdf->Cell($ancho1, $alto1, $totalFaltanBloque, 1, 1, 'C');
                    $pdf->Cell($ancho1, $alto1, $fechaInicio, 1, 0, 'L', true);
                    $totalInscritos = $totalInscritos + $totalInscritosBloque;
                    $totalFaltan = $totalFaltan + $totalFaltanBloque;
                    $totalBloque = 0;
                    $totalFaltanBloque = 0;
                    $totalInscritosBloque = 0;
                }
                $totalBloque = $totalBloque + 1;
                if ($registros[$i]['estado'] == 1) {
                    $totalInscritosBloque = $totalInscritosBloque + 1;
                } else {
                    $totalFaltanBloque = $totalFaltanBloque + 1;
                }
            }
            $totalInscritos = $totalInscritos + $totalInscritosBloque;
            $totalFaltan = $totalFaltan + $totalFaltanBloque;
            $pdf->Cell($ancho1, $alto1, $totalBloque, 1, 0, 'C');
            $pdf->Cell($ancho1, $alto1, $totalInscritosBloque, 1, 0, 'C');
            $pdf->Cell($ancho1, $alto1, $totalFaltanBloque, 1, 1, 'C');
            $pdf->Ln(5);
            $pdf->Cell($ancho1, $alto1, 'TOTAL: ', 1, 0, 'R', true);
            $pdf->Cell($ancho1, $alto1, count($registros), 1, 0, 'C');
            $pdf->Cell($ancho1, $alto1, $totalInscritos, 1, 0, 'C');
            $pdf->Cell($ancho1, $alto1, $totalFaltan, 1, 0, 'C');
        } else {
            $pdf->SetFillColor(100, 0, 0);
            $pdf->SetTextColor(255, 255, 255);
            $ancho1 = 0;
            $pdf->Cell($ancho1, $alto1, 'NO HAY REGISTROS EN INSCRIPCION DATOS PARA LA FECHA: ' . $fecha, 1, 1, 'C', true);
        }
        $this->footer($pdf);
        $pdf->Output();
    }

    public function getInscripcionOnLine($lapso) {
        $horaNow = new DateTime("now", new DateTimeZone('America/Caracas'));
        $horaNow = $horaNow->format('d-m-Y H:i:s');
    }

    //----INSCRIPCION DATOS SEGUN FECHA SOLAMENTE pero solo los que van on line------
    public function getMonitoreoOnLineAgrupadoPorEspecialidad($lapsoInscripcion) {
        $data = null;
        $success = false;
        $lapsoInscripcion = VariablesGlobales::$lapsoDeInscripcion;
        $result = $this->getInscripcionDao()->getMonitoreoInscripcionOnLineAgrupadoPorEspecialidad($lapsoInscripcion);
        $data = UtilsArrayController::llenarData($result);
        return UtilsArrayController::organizarOutput($success, $data, null);
    }

}

?>
